package com.example.treeEngine;

import com.example.pojo.mysql.SysDept;
import com.example.pojo.mysql.TreeSelect;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/* ━━━━━━佛祖保佑━━━━━━
 *                  ,;,,;
 *                ,;;'(    社
 *      __      ,;;' ' \   会
 *   /'  '\'~~'~' \ /'\.)  主
 * ,;(      )    /  |.     义
 *,;' \    /-.,,(   ) \    码
 *     ) /       ) / )|    农
 *     ||        ||  \)
 *     (_\       (_\
 * ━━━━━━永无BUG━━━━━━
 * @author ：zjq
 * @date ：2020/12/10 15:54
 * @description: TODO
 * @version: V1.0
 * @slogan: 天下风云出我辈，一入代码岁月催
 */
public abstract class AbstractTree<E> {


    /**
     * 构建  树
     *
     * @param
     * @return
     */
    protected abstract List<E> buildTree(List<E> inputList);

    /**
     * 递归列表
     */
    protected abstract void recursionFn(List<E> inputList, E e);

    /**
     * 得到子节点列表
     */
    protected abstract List<E> getChildList(List<E> inputList, E e);

    /**
     * 判断是否有子节点
     */
    protected abstract boolean hasChild(List<E> inputList, E e);

    /**
     * 统一 包装 树形结构
     *
     * @param inputList
     * @param
     * @return
     */
    public List<TreeSelect> buildTreeSelect(List<E> inputList) {
        List<E> listE = buildTree(inputList);
        List<TreeSelect> treeSelect = listE.stream().map(TreeSelect::new).collect(Collectors.toList());
        return treeSelect;

    }

}
